package com.doit.day01

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * @Author:
 * @WX: 17710299606
 * @Tips: 学大数据 ,到多易教育
 * @DOC: https://blog.csdn.net/qq_37933018?spm=1000.2115.3001.5343
 * @Description:
 * spark是一个分布式计算引擎
 * 可以加载HDFS上的数据 , 处理 , 输出结果
 */
object GetStarting {
  def main(args: Array[String]): Unit = {

    val conf = new SparkConf
    // 程序名
    conf.setAppName("getstarting - app")
    conf.setMaster("local[8]") // 本地运行  分配一恶搞核
    // 1 获取编程核心对象
    val sc = SparkContext.getOrCreate(conf)
    /**
     * 如果加载数据后 返回的数据是迭代器
     * 对返回的迭代器再次封装
     *   1. 分布式运算功能   分区列表
     *      2. 每个RDD计算链条   对上个RDD的依赖
     *      RDD
     *      1  文件   本地  HDFS
     *      2  mysql
     *      3  本地集合
     *
     * RDD的方法
     */

    // 2  加载数据
    val data: RDD[String] = sc.textFile("data/words/")

    println(data.getNumPartitions)

    // 3 处理数据
    val res: RDD[String] = data.flatMap(_.split("\\s+"))
    val res2: RDD[(String, Iterable[String])] = res.groupBy(e => e)
    val res3: RDD[(String, Int)] = res2.mapValues(_.size)

    // 4 输出结果
    res3.saveAsTextFile("data/words_res")

    // 5 释放资源
    sc.stop()

  }

}
